export const createStore = function createStore(reducer) {
    let state, listeners = [];

    // 获取公共状态
    const getState = () => {
        return _.clone(true, state);
    }
    // 向事件池中注入方法
    const subscribe = (listener) => {
        if(!listeners.includes(listener)) {
            listeners.push(listener);
        }
        // 返回移除事件的方法
        return function unsubscribr() {
            listeners = listeners.filter(item => item!==listener);
        }
    }
    // 派发任务
    const dispatch = (action) => {
        // 通知reducer执行，修改公共状态
        try {
            state = reducer(state, action);
        }catch(err) {
            console.log(err)
        }
        // 通知事件池中的方法执行
        listeners.forEach(listener => {
            listener();
        })

        return action
    }

    // 最开始要先派发一次任务，为了同步初始状态
    dispatch({
        type: Symbol(),
    })

    return {
        getState,
        subscribe,
        dispatch
    }
}